/**
 * 将 Menu.Item[] => Antd Menu 组件 的 items 需要的数据格式
 *  1. name => label
 *  2. id   => key
 *  3. icon => 删除
 */
import store2 from "store2";

// @ts-ignore
export function transformMenus(list: Menu.Item[]) {
  // @ts-ignore
  return list.map((item) => {
    // 浅拷贝一下，避免修改到元数据
    const curItem = { ...item };
    // 判断当前 curItem 是否有 children, 有的话，则要将 children 递归
    if (curItem.children) {
      curItem.children = transformMenus(curItem.children);
    }

    return {
      key: curItem.router || "" + curItem.id,
      label: curItem.name,
      children: curItem.children,
    };
  });
}

/**
 * deepTree
 */
export function deepTree(list: Menu.Item[]) {
  // 定义一个最终结果集合
  const result = [];
  // 定义一个映射对象
  const map: Record<number, Menu.Item> = {};
  // 循环list写入到map中
  for (const item of list) {
    map[item.id] = { ...item };
  }
  // 再次循环list来处理children
  for (const item of list) {
    if (!item.parentId) {
      // 没有 parentId 则直接将其在 map 中的映射写入到 result 中
      result.push(map[item.id]);
    } else {
      // 有 parentId, 则将其在 map 中的映射追加到 父级的 children 字段中
      const parent = map[+item.parentId];
      if (!parent.children) {
        // 父级没有 children , 则设置 children
        parent.children = [map[item.id]];
      } else {
        // 父级有 children，则追加进 children
        parent.children.push(map[item.id]);
      }
    }
  }

  return result;
}

/**
 * 数组重排
 */
export function reorder(list: any[], startIndex: number, endIndex: number) {
  const result = Array.from(list);
  // 先移除 startIndex 位置的元素
  const [removed] = result.splice(startIndex, 1);

  // 再将移除的元素插入到目标位置
  result.splice(endIndex, 0, removed);

  return result;
}

/**
 * setRefreshToken
 */
export function setRefreshToken(payload: string) {
  store2.set("refreshToken", payload);
}

/**
 * getRefreshToken
 */
export function getRefreshToken() {
  return store2.get("refreshToken");
}

/**
 * setToken
 */
export function setToken(payload: string) {
  store2.set("token", payload);
}

/**
 * getToken
 */
export function getToken() {
  return store2.get("token");
}
